package cn.qingyun.gis.modules.scenes.service;

import cn.hutool.core.lang.tree.Tree;
import cn.qingyun.gis.modules.express.entity.dto.ExpressRegionNodeDto;
import cn.qingyun.gis.modules.scenes.entity.UniAddrRegion;
import cn.qingyun.gis.modules.scenes.request.SubBoundaryRequest;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.xml.soap.Node;
import java.math.BigDecimal;
import java.util.List;

/**
 * @author LHJ
 * @description
 * @date 2024/10/30 13:42
 */
public interface UniAddrRegionService extends IService<UniAddrRegion> {
    /**
     * 查询level
     * @param code
     * @return
     */
    Integer selectLevel(String code);
    /**
     * 查询区划
     *
     * @param code
     * @return
     */
    UniAddrRegion selectRegionByCode(String code);

    /**
     * 查询区划列表
     * @param code
     * @return
     */
    List<UniAddrRegion> selectRegionListByCode(String code);

    /**
     * 查询区划列表
     *
     * @param level
     * @param code
     * @return
     */
    List<UniAddrRegion> selectRegionList(Integer level, String code);

    /**
     * 加可视区域区划查询
     * @param level
     * @param code
     * @param lbLon
     * @param lbLat
     * @param rtLon
     * @param rtLat
     * @return
     */
    List<UniAddrRegion> selectRegionListSub(Integer level, String code, BigDecimal lbLon, BigDecimal lbLat, BigDecimal rtLon, BigDecimal rtLat);

    /**
     * 查询区划列表-根据父编码
     * @param level
     * @param code
     * @return
     */
    List<UniAddrRegion> selectRegionByParentCodeList(Integer level, String code);

    /**
     * 查询区划列表-可视区域-根据父编码
     * @param level
     * @param code
     * @param lbLon
     * @param lbLat
     * @param rtLon
     * @param rtLat
     * @return
     */
    List<UniAddrRegion> selectRegionByParentCodeListSub(Integer level, String code,BigDecimal lbLon, BigDecimal lbLat, BigDecimal rtLon, BigDecimal rtLat);

    /**
     * 查询省市区数据
     *
     * @return
     */
    List<UniAddrRegion> selectProvinceCityDisList();

    /**
     * 根据父编码查区域数据
     *
     * @param parentCode
     * @return
     */
    List<UniAddrRegion> selectRegionByParentCode(String parentCode);

    /**
     * 摸排根据父节点编码获取子节点列表
     *
     * @param code
     * @return
     */
    List<ExpressRegionNodeDto> sonRegionListNew(String code);

    List<Tree<String>> getRegionList();
    /**
     * 获取区域下的子边界列表
     * @param request
     * @return
     */
    List<UniAddrRegion> selectRegionBoundaryList(SubBoundaryRequest request);


    /**
     * 获取省份信息
     * @param i
     * @return
     */
    List<UniAddrRegion> selectProvinceByCode( int i);

    /**
     * 根据编码查询区域信息
     * @param code
     * @param flag
     * @return
     */
    List<UniAddrRegion> selectUniAddrByCode(String code, Integer flag);

    /**
     * 根据编码查询边界
     * @param code
     * @return
     */
    UniAddrRegion selectRegionBoundary(String code);

    List<UniAddrRegion> getAncestorsUpToLevel(String microGridCode, int startLevel, int endLevel);
}
